package com.example.springboot.common;

// 导入Lombok注解简化代码
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 通用API返回结果封装类
 * 用于统一RESTful接口的响应格式
 *
 * @param <T> 数据泛型类型
 */
@Data// 自动生成getter、setter、toString等方法
@AllArgsConstructor// 生成全参数构造函数
@NoArgsConstructor// 生成无参数构造函数
public class Result<T> {
    private String code;// 业务状态码（0表示成功，其他表示失败）
    private String msg;// 响应消息
    private T data;// 响应数据（泛型类型）

    /**
     * 带数据的构造函数
     *
     * @param data 响应数据
     */
    public Result(T data) {
        this.data = data;
    }
    /**
     * 静态工厂方法：返回成功响应（无数据）
     *
     * @return Result实例（状态码0，消息"成功"）
     */
    public static Result success() {
        Result result = new Result<>();
        result.setCode("0");// 设置成功状态码
        result.setMsg("成功");// 设置成功消息
        return result;
    }

    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>(data);
        result.setCode("0");
        result.setMsg("成功");
        result.setData(data);// 设置响应数据
        return result;
    }

    public static Result error(String code, String msg) {
        Result result = new Result<>();
        result.setCode(code);// 设置自定义错误码
        result.setMsg(msg);// 设置自定义错误消息
        return result;
    }

}
